import java.util.Random;


public class BiddingModel {
	
	Random generator = new Random();
	
	int pula=0;
	//int ktozaczyna=0;
	boolean jeststawka=false;
	boolean allin=false;
	int najwyzsza=0;
	int stawka=0;


	BiddingModel()
	{
	}
	
	String wypiszObecnaPule()
	{
		return "Obecna pula: "+pula;
	}
	
	String wypiszObecnaStawke()
	{
		return "Obecna stawka: "+najwyzsza;
	}
	
	void wejsciedogry(Player p, int wpisowe)
	{
		this.pula=this.pula+wpisowe;
		p.licytuj(wpisowe);
		//ktozaczyna++;
	}
	String check(Player p)
	{
		String wyjscie="";
		wyjscie=p.imie+" czeka, zostalo mu "+p.zetony+"\n";
		//System.out.println("Obecna pula: "+pula);
		//System.out.println("Obecna stawka: "+najwyzsza);
		return wyjscie;
	}
	String bet(int stawka, Player p)
	{
		String wyjscie="";
		p.licytuj(stawka);
		pula=pula+stawka;
		najwyzsza=stawka;
		p.ilewydane=stawka;
		
		wyjscie=p.imie+" postawil/a pierwsza stawke w wysokosci "+stawka+", zostalo mu "+p.zetony+"\n";
		//System.out.println("Obecna pula: "+pula);
		//System.out.println("Obecna stawka: "+najwyzsza);
		jeststawka=true;
		return wyjscie;
	}
	String raise(int stawka, Player p)
	{
		String wyjscie="";
		p.licytuj(stawka+(najwyzsza-p.ilewydane));
		pula=pula+stawka+(najwyzsza-p.ilewydane);
		p.ilewydane=najwyzsza+stawka;
		
		wyjscie=p.imie+" przebil/a najwyzsza stawke o "+(stawka)+", zostalo mu "+p.zetony+"\n";
		//System.out.println(Obecna pula: "+pula);
		najwyzsza=najwyzsza+stawka;
		//System.out.println("Obecna stawka: "+najwyzsza);
		return wyjscie;
	}
	String call(Player p)
	{
		String wyjscie="";
		p.licytuj(najwyzsza-p.ilewydane);
		pula=pula+najwyzsza-p.ilewydane;
		wyjscie=p.imie+" wyrownal/a stawke w wysokosci "+najwyzsza+", dodajac "+(najwyzsza-p.ilewydane)+", zostalo mu "+p.zetony+"\n";
		p.ilewydane=najwyzsza;
		//System.out.println("Obecna pula: "+pula);
		//System.out.println("Obecna stawka: "+najwyzsza);
		return wyjscie;
	}
	String fold(Player p)
	{
		String wyjscie="";
		wyjscie=p.imie+" zakonczyl/a gre, zostalo mu "+p.zetony+"\n";
		//System.out.println("Obecna pula: "+pula);
		//System.out.println("Obecna stawka: "+najwyzsza);
		p.czygra=false;
		return wyjscie;
	}
	String allin(Player p)
	{
		String wyjscie="";
		int stawka;
		stawka=p.zetony;
		p.licytuj(stawka);
		pula=pula+stawka;
		if(najwyzsza<stawka)
		{
			najwyzsza=stawka;
		}
		p.ilewydane=p.ilewydane+stawka;
		wyjscie=p.imie+" postawil/a wszystko ("+stawka+"), zostalo mu "+p.zetony+"\n";
		//System.out.println("Obecna pula: "+pula);
		//System.out.println("Obecna stawka: "+najwyzsza);
		jeststawka=true;
		allin=true;
		return wyjscie;
	}

	
	
	
	/*
	void mojastrategia(Player b)
	{
		if(b.czygra==true)
		{
			int wylosowana = generator.nextInt(10); //0-9
			int stawka = (generator.nextInt(10)+1)*10;
			if(allin==true)
			{
				if(b.nrukladu<=4) allin(b);
				else if(b.nrukladu>=7) fold(b);
				else if(wylosowana<5) allin(b);
				else fold(b);
			}
			else if(jeststawka==false)
			{
				if(b.nrukladu==9) {check(b);}
				else
				{
					stawka = b.zetony/10;
					if(stawka<5) 
					{
						fold(b);
					}
					else bet(stawka, b);
				}
			}
			else if(b.nrukladu==9 || b.nrukladu==8) 
			{
				if(wylosowana==0)
				{
					allin(b);
				}
				else if(wylosowana<3)
				{
					fold(b);
				}
				
			}
		}
		
	}
	*/
	
	String strategiapasywna(Player b)
	{
		String wynik="";
		//System.out.println("-----bezpieczna: "+allin);
		if(b.czygra==true)
		{
			//int wylosowana = generator.nextInt(10); //0-9
			//int stawka = (generator.nextInt(10)+1)*10;
			if(allin==true)
			{
				wynik=fold(b);
			}
			else if(jeststawka==false)
			{
				if(b.nrukladu==9 || b.nrukladu==8) {wynik=check(b);}
				else
				{
					stawka = b.zetony/10;
					if(stawka<10) 
					{
						wynik=fold(b);
					}
					else wynik=bet(stawka, b);
				}
			}
			else
			{
				if(b.zetony<najwyzsza) wynik=fold(b);
				else wynik=call(b);
			}
		}
		return wynik;
	}
	
	String strategiaallin(Player b)
	{
		String wynik="";
		//System.out.println("-----allin: "+allin);
		if(b.czygra==true)
		{
			//int wylosowana = generator.nextInt(10); //0-9
			int stawka = (generator.nextInt(5)+1)*10;//10-50
			if(allin==true)
			{
				wynik=allin(b);
			}
			else if(jeststawka==false)
			{
				{
					stawka = b.zetony/5;
					if(stawka<10) 
					{
						wynik=allin(b);
					}
					else wynik=bet(stawka, b);
				}
			}
			else
			{
				if(b.zetony<najwyzsza) wynik=allin(b);
				else if(b.nrukladu==9) wynik=call(b);
				else
				{
					if((najwyzsza-b.ilewydane+stawka)>b.zetony)
					{
						wynik=allin(b);
					}
					else wynik=raise(stawka, b);
						
				}
			}
		}
		return wynik;
	}
	
	String strategiamieszana(Player b)
	{
		String wynik="";
		//System.out.println("-----mieszana : "+allin);
		int wylosowana = generator.nextInt(2); //0-1
		if(wylosowana==0) wynik=strategiaallin(b);
		else wynik=strategiapasywna(b);
		return wynik;
	}
	
	String licytacjabota(Player b)
	{
		int wylosowana = generator.nextInt(3);//0-2
		String wynik="";
		if(wylosowana==0) wynik=strategiaallin(b);
		else if(wylosowana==1) wynik=strategiapasywna(b);
		else wynik=strategiamieszana(b);
		return wynik;
	}
	
	//Funkcja okreslajaca wygranego i przypisujaca mi pieniadze z puli oraz wypisujaca ranking
	String wyplata(Player h[], Player b[], Player p[], boolean czyremis)
	{
		String wynik="";
		boolean cg=false;
		int k=0;
		
		if(czyremis==true)
		{
			wynik=wynik+"Ogloszono remis, nikt nie zdobywa zetonow z puli.\n";
			for(int i=0; i<(h.length+b.length); i++)
			{
				if(i<h.length)
				{
					wynik=wynik+h[i].imie+" ma "+h[i].zetony+" zetonow.\n";
				}
				else
				{
					wynik=wynik+b[i-h.length].imie+" ma "+b[i-h.length].zetony+" zetonow.\n";
				}
			}
		}
		else 
		{
			while(cg==false)
			{
			for(int i=0; i<(h.length+b.length); i++)
			{
				if(i<h.length)
				{
					if(h[i].id==p[k].id)
					{
						if(h[i].czygra==false) continue;
						h[i].zetony=h[i].zetony+pula;
						wynik=wynik+h[i].imie+" wygral/a "+pula+" zetonow i ma juz "+h[i].zetony+" zetonow.\n";
						cg=h[i].czygra;
					}
				}
				else
				{
					if(b[i-h.length].id==p[k].id)
					{
						if(b[i-h.length].czygra==false) continue;
						b[i-h.length].zetony=b[i-h.length].zetony+pula;
						wynik=wynik+b[i-h.length].imie+" wygral "+pula+" zetonow i ma juz "+b[i-h.length].zetony+" zetonow.\n";
						cg=b[i-h.length].czygra;
					}
				}
				
			}
			k++;
			}
			k--;
			wynik=wynik+"Pozostali gracze:\n";
			for(int i=0; i<(h.length+b.length); i++)
			{
				if(i<h.length)
				{
					if(h[i].id!=p[k].id) wynik=wynik+h[i].imie+" ma "+h[i].zetony+" zetonow.\n";
				}
				else
				{
					if(b[i-h.length].id!=p[k].id) wynik=wynik+b[i-h.length].imie+" ma "+b[i-h.length].zetony+" zetonow.\n";
				}
			}
			
		}
		pula=0;
		allin=false;
		return wynik;
	}
}
